/* $Id: socket.c 1.1 1995/01/01 07:11:14 cthuang Exp $
 *
 * This module has been modified by Radim Kolar for OS/2 emx
 */

/***********************************************************************
  module:       socket.c
  program:      popclient
  SCCS ID:      @(#)socket.c    1.5  4/1/94
  programmer:   Virginia Tech Computing Center
  compiler:     DEC RISC C compiler (Ultrix 4.1)
  environment:  DEC Ultrix 4.3
  description:  UNIX sockets code.
 ***********************************************************************/

#include <arpa/inet.h>
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int Socket(const char* host, int serverPort)  //主机及端口名
{
  int sock;
  unsigned long inaddr;
  struct sockaddr_in ad;
  struct hostent* hp;

  memset(&ad, 0, sizeof(ad));
  ad.sin_family = AF_INET;

  inaddr = inet_addr(host);   //主机号转换成二进制
  if (inaddr != INADDR_NONE)  //地址有效
    memcpy(&ad.sin_addr, &inaddr, sizeof(inaddr));
  else {
    hp = gethostbyname(host);
    if (hp == NULL) return -1;
    memcpy(&ad.sin_addr, hp->h_addr, hp->h_length);
  }
  ad.sin_port = htons(serverPort);

  sock = socket(AF_INET, SOCK_STREAM, 0);

  if (sock < 0) return sock;

  if (connect(sock, (struct sockaddr*)&ad, sizeof(ad)) < 0) {
    close(sock);
    return -1;
  }

  return sock;
}
